﻿using System.Collections.Generic;
using System.Web.Mvc;
using EFDataModel;

namespace ContactMvc4TB.Helpers.DynamicDataType.Creation
{
    /// <summary>
    /// Interface zum Bearbeiten der Dynamischen Datentypen
    /// </summary>
    public interface IEditModel
    {
        /// <summary>
        /// Der Name des Eingabefeldes
        /// </summary>
        string Name { get; set; }

        /// <summary>
        /// Die Beschreibung des Eingabefeldes, für welchen Zweck dieses verwendet werden soll
        /// </summary>
        string Description { get; set; }

        /// <summary>
        /// Gibt an ob das Eingabefeld angezeigt werden soll
        /// </summary>
        bool IsVisible { get; set; }

        /// <summary>
        /// Die SortId nach der die Engabefelder auf der Seite dargestellt werden
        /// </summary>
        string SortId { get; set; }

        /// <summary>
        /// Benutzerdefinierte CSS Klasse die zusätzlich am Eingabefeld gesetzt wird und am Error Displayfield.
        /// </summary>
        string CustomCssClass { get; set; }

        /// <summary>
        /// Die ausgewählte Dynamische DynamicDataTypeCategoryId, gehört zur Liste mit DynamicDataTypeCategories
        /// </summary>
        long DynamicDataTypeCategoryId { get; set; }

        /// <summary>
        /// Die Auflistung der zur Verfügung stehenden Dynamischen Kategorien. Jeder Eintrag muss einer Kategorie zugeordnet werden, diese wird dann
        /// beim Anzeigen der einzelnen Werte für die ausgewählte Kategorie über den Werten angezeigt.
        /// </summary>
        IEnumerable<SelectListItem> DynamicDataTypeCategories { get; }

        /// <summary>
        /// Der aktuelle Dynamische Datentyp, dienst nur Zur Anzeige von Daten!
        /// </summary>
        EFDynamicDataType CurrentDynamicDataType { get; set; }

        /// <summary>
        /// Gibt an ob es sich um einen Pflichtwert handelt
        /// </summary>
        bool IsRequired { get; set; }

        /// <summary>
        /// Gibt an wie Lang der string, wert maximal sein darf, bei Integer gibt er an wie groß der Wert maximal sein darf
        /// </summary>
        int? MaxLength { get; set; }

        /// <summary>
        /// die Mindestlänge bei Strings, bei Integer Werten die unterste Grenze für den Wert
        /// </summary>
        int? MinLength { get; set; }

        /// <summary>
        /// Der Formatstring der für die Displayvalues verwendet wird. hier steht {0} für den Wert der gesetzt werden soll, hier kann ein ganz normaler .NET FormatString angegeben werden
        /// </summary>
        string FormatString { get; set; }

        /// <summary>
        /// Ein RegExString der dem Datentyp für Validierungszecke hinterlegt werden kann
        /// </summary>
        string RegExString { get; set; }

        /// <summary>
        /// Gibt an ob nach dem Dynamischen Datentyp gefiltert werden kann.
        /// </summary>
        bool IsFilterable { get; set; }
    }
}